package main

/*
	两个字符串s1和s2，写一个函数来判断s2是否包含s1的排列，返回true/false
	换句话说，s1的排列之一是s2的子串
*/
func checkInclusion(s1 string, s2 string)bool{
	//记录s1与窗口内中字符的数量差，cnt = cnt2-cnt1
	n := len(s1)
	if len(s2)<n{
		//s2长度小于s1
		return false
	}
	cnt := [26]int{}
	for i:=0;i<n;i++{
		cnt[s1[i]-'a']--
		cnt[s2[i]-'a']++
	}
	diff := 0
	for j:=0;j<26;j++ {
		if cnt[j]!=0{
			diff++
		}
	}
	if diff == 0{
		return true
	}
	for i:=n;i<len(s2);i++{
		x := s2[i]-'a'
		y := s2[i-n]-'a'
		if cnt[x]==0{
			diff++
		}
		cnt[x]++
		if cnt[x]==0{
			diff--
		}
		if cnt[y]==0{
			diff++
		}
		cnt[y]--
		if cnt[y]==0{
			diff--
		}
		if diff==0{
			return true
		}else{
			continue
		}
	}
	return false
}

func main(){
	s1 := "ab"
	s2 := "eidbaoo"
	print(checkInclusion(s1,s2))
}